#include <bits/stdc++.h>
using namespace std;
using uint=unsigned int;
using ll=long long;
using ull=unsigned long long;
using i128=__int128;
const int N=1e6+5;

int n;
bool check[210];
int path[210];

void dfs(int col){
    if(col>n){
        for(int i=1;i<=n;i++){
            printf("%5d",path[i]);
        }
        printf("\n");
        return;
    }
    for(int i=1;i<=n;i++){
        if(!check[i]){
            path[col]=i;
            check[i]=1;
            dfs(col+1);
            check[i]=0;
        }
    }
    return;
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    cin>>n;
    dfs(1);

    return 0;
}
// 题目：全排列问题

// 描述：
// 按照字典序输出自然数 1 到 n 所有不重复的排列，即 n 的全排列，要求所产生的任一数字序列中不允许出现重复的数字。
// 输入格式
// 一个整数n。
// 输出格式
// 由 1∼n 组成的所有不重复的数字序列，每行一个序列。
// 每个数字保留 5 个场宽。

// 输入样例
// 3
// 输出样例
//     1    2    3
//     1    3    2
//     2    1    3
//     2    3    1
//     3    1    2
//     3    2    1